package Math;

public class JZ16数值的整数次方 {
    /**
     * 可以采用多种的方式
     * 1 采用的暴力的方法
     *
     * @param b
     * @param n
     * @return
     */
    public double Power(double b, int n) {
        if (n < 0) {
            b = 1 / b;
            n = -n;
        }
        double ret = 1.0;
        for (int i = 0; i < n; ++i) {
            ret *= b;
        }
        return ret;
    }

    double Power2(double b, int n) {
        if (n < 0) {
            b = 1 / b;
            n = -n;
        }
        double x = b; // 记录x^0, x^1, x^2 ...
        double ret = 1.0;
        while (n != 0) {
            if ((n & 1) != 0) {
                ret *= x; // 二进制位数是1的，乘进答案。
            }
            x *= x;
            // 相当于是n/2
            n >>= 1;
        }
        return ret;
    }
}
